#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5,V=1e6+5,M=1e6,inf=1e9;
inline int read(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch-getchar();}
    while(isdigit(ch)){x=(x<<1)+(x<<3)+ch-48,ch=getchar();}
    return x*f;
}
bool SSS;
int q;

#define ls (x<<1)
#define rs (x<<1|1)
#define mid (l+r>>1)

// struct Seg1{
//     int t[V<<2],laz[V<<2];

//     void build(int x,int l,int r){
//         t[x]=0,laz[x]=0;
//         if(l==r) return;
//         build(ls,l,mid);
//         build(rs,mid+1,r);
//     }
//     inline void pushup(int x){
//         t[x]=max(t[ls],t[rs]);
//     }
//     inline void down(int x,int k){
//         t[x]+=k;
//         laz[x]+=k;
//     }
//     inline void pushdown(int x){
//         if(laz[x]==0) return;
//         down(ls,laz[x]);
//         down(rs,laz[x]);
//         laz[x]=0;
//     }
//     void update(int x,int l,int r,int L,int R,int k){
//         if(l>=L&&r<=R){
//             down(x,k);
//             return;
//         }
//         pushdown(x);
//         if(L<=mid) update(ls,l,mid,L,R,k);
//         if(R>mid) update(rs,mid+1,r,L,R,k);
//         pushup(x);
//     }
//     void modify(int x,int l,int r,int p,int k){
//         if(l==r){
//             t[x]=k;
//             return;
//         }
//         pushdown(x);
//         if(p<=mid) modify(ls,l,mid,p,k);
//         else modify(rs,mid+1,r,p,k);
//         pushup(x);
//     }
//     void chmax(int x,int l,int r,int p,int k){
//         if(l==r){
//             t[x]=max(t[x],k);
//             return;
//         }
//         pushdown(x);
//         if(p<=mid) chmax(ls,l,mid,p,k);
//         else chmax(rs,mid+1,r,p,k);
//         pushup(x);
//     }
//     int query(int x,int l,int r,int L,int R){
//         if(l>=L&&r<=R) return t[x];
//         pushdown(x);
//         int res=0;
//         if(L<=mid) res=max(res,query(ls,l,mid,L,R));
//         if(R>mid) res=max(res,query(rs,mid+1,r,L,R));
//         return res;
//     }    
// }mx;

// struct Seg2{
//     int t[V<<2],laz[V<<2];

//     void build(int x,int l,int r){
//         t[x]=inf,laz[x]=0;
//         if(l==r) return;
//         build(ls,l,mid);
//         build(rs,mid+1,r);
//     }
//     inline void pushup(int x){
//         t[x]=min(t[ls],t[rs]);
//     }
//     inline void down(int x,int k){
//         t[x]+=k;
//         laz[x]+=k;
//     }
//     inline void pushdown(int x){
//         if(laz[x]==0) return;
//         down(ls,laz[x]);
//         down(rs,laz[x]);
//         laz[x]=0;
//     }
//     void update(int x,int l,int r,int L,int R,int k){
//         if(l>=L&&r<=R){
//             down(x,k);
//             return;
//         }
//         pushdown(x);
//         if(L<=mid) update(ls,l,mid,L,R,k);
//         if(R>mid) update(rs,mid+1,r,L,R,k);
//         pushup(x);
//     }
//     void modify(int x,int l,int r,int p,int k){
//         if(l==r){
//             t[x]=k;
//             return;
//         }
//         pushdown(x);
//         if(p<=mid) modify(ls,l,mid,p,k);
//         else modify(rs,mid+1,r,p,k);
//         pushup(x);
//     }    
//     void chmin(int x,int l,int r,int p,int k){
//         if(l==r){
//             t[x]=min(t[x],k);
//             return;
//         }
//         pushdown(x);
//         if(p<=mid) chmin(ls,l,mid,p,k);
//         else chmin(rs,mid+1,r,p,k);
//         pushup(x);
//     }
//     int query(int x,int l,int r,int L,int R){
//         if(l>=L&&r<=R) return t[x];
//         pushdown(x);
//         int res=inf;
//         if(L<=mid) res=min(res,query(ls,l,mid,L,R));
//         if(R>mid) res=min(res,query(rs,mid+1,r,L,R));
//         return res;
//     }    
// }mn;

map<pair<int,int>,vector<int> > mp;
vector<pair<int,int> > tq[N<<2];
int sz[N<<2];

void Add(int x,int l,int r,int L,int R,pair<int,int> p){
    if(l>=L&&r<=R){
        tq[x].push_back(p);
        sz[x]++;
        return;
    }
    if(L<=mid) Add(ls,l,mid,L,R,p);
    if(R>mid) Add(rs,mid+1,r,L,R,p);
    sz[x]=sz[ls]+sz[rs];
}

int mxL,mnR=inf;
int tpl,tpr,ans=inf;
pair<int,int> upl[V<<2],upr[V<<2];

int ml[V],mr[V];

int ttpl;
pair<int,int> tupl[V*20];

int tmn[V];
inline void add1(int x,int k){
    for(;x;x-=x&-x){
        tupl[++ttpl]={x,tmn[x]};
        tmn[x]=min(tmn[x],k);
    }
}
inline int query1(int x){
    int res=inf;
    for(;x<=M;x+=x&-x) res=min(res,tmn[x]);
    return res;
}

int ttpr;
pair<int,int> tupr[V*20];

int tmx[V];
inline void add2(int x,int k){
    for(;x<=M;x+=x&-x){
        tupr[++ttpr]={x,tmx[x]};
        tmx[x]=max(tmx[x],k);
    }
}
inline int query2(int x){
    int res=0;
    for(;x;x-=x&-x) res=max(res,tmx[x]);
    return res;
}

void Solve(int x,int L,int R){
    if(!sz[x]){
        int res=(mxL<=mnR)?(mr[mxL]-ml[mnR]+1):ans;
        for(int i=L;i<=R;++i) cout<<res<<'\n';
        return;
    }
    int Mid=(L+R>>1);
    int TPL=tpl,TPR=tpr;
    int TTPL=ttpl,TTPR=ttpr;
    int MXL=mxL,MNR=mnR;
    int Ans=ans;

    for(pair<int,int> pl:tq[x]){
        int l=pl.first,r=pl.second;
        upl[++tpl]={l,mr[l]};
        upr[++tpr]={r,ml[r]};
        int mnr=(r+1<=M)?query1(r+1):inf;
        int mxl=(1<=l-1)?query2(l-1):0;
        if(mxl!=0) ans=min(ans,r-mxl+1);
        if(mnr!=inf) ans=min(ans,mnr-l+1);
        add1(l,r),add2(r,l);  
        // mn.chmin(1,1,M,l,r);
        // mx.chmax(1,1,M,r,l);
        mxL=max(mxL,l),mnR=min(mnR,r);
        mr[l]=min(mr[l],r),ml[r]=max(ml[r],l);
    }

    if(L==R){
        if(mxL<=mnR)cout<<mr[mxL]-ml[mnR]+1<<'\n';
        else cout<<ans<<'\n';
    }
    else{
        Solve(ls,L,Mid);
        Solve(rs,Mid+1,R);
    }

    mxL=MXL,mnR=MNR;
    while(tpl>TPL){
        mr[upl[tpl].first]=upl[tpl].second;
        --tpl;
    }
    while(tpr>TPR){
        ml[upr[tpr].first]=upr[tpr].second;
        --tpr;
    }
    while(ttpl>TTPL){
        tmn[tupl[ttpl].first]=tupl[ttpl].second;
        --ttpl;
    }
    while(ttpr>TTPR){
        tmx[tupr[ttpr].first]=tupr[ttpr].second;
        --ttpr;
    }
    ans=Ans;
}

bool TTT;
signed main(){
    freopen("stone.in","r",stdin);
    freopen("stone.out","w",stdout);
    ios::sync_with_stdio(0);
    cin.tie(0),cout.tie(0);
    cin>>q;
    char opt;int l,r;
    for(int i=1;i<=q;++i){
        cin>>opt>>l>>r;--r;
        if(opt=='A') mp[{l,r}].emplace_back(i);
        else{
            int t=mp[{l,r}].back();
            mp[{l,r}].pop_back();
            Add(1,1,q,t,i-1,{l,r});
        }
    }
    for(pair<pair<int,int>,vector<int> > pl:mp)
        for(int t:pl.second)
            Add(1,1,q,t,q,pl.first);
    for(int i=1;i<=M;i++) mr[i]=inf,tmn[i]=inf;
    Solve(1,1,q);
    return 0;
}